package com.sunrise.configuracoes.servico;

import java.util.Collection;
import java.util.List;

import javax.annotation.Resource;

import lombok.Getter;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.sunrise.configuracoes.repositorio.iface.PerfilDao;
import com.sunrise.crm.repositorio.iface.UsuarioDao;
import com.sunrise.generico.entidade.Perfil;
import com.sunrise.generico.entidade.Usuario;
import com.sunrise.generico.util.MessagesUtil;
import com.sunrise.generico.util.SecurityUtil;
import com.sunrise.generico.visao.Filtro;

@Service
@Transactional(readOnly = true)
public class ManterUsuarioService {

	@Resource(name = "usuarioDaoImpl")
	@Getter
	private UsuarioDao usuarioDAO;

	@Resource(name = "perfilDaoImpl")
	@Getter
	private PerfilDao perfilDAO;

	public boolean validarNovaSenha(Usuario entidade) {
		Usuario usuario = usuarioDAO.getById(entidade.getId());
		if(usuario.getPassword().equals(SecurityUtil.criptografar(entidade.getPassword()))){
			return true;
		}
		return false;
	}

	@Transactional(readOnly = false)
	public String alterarSenha(Usuario usuario) {
		usuario.setPassword(SecurityUtil.criptografar(usuario.getNovaSenha()));
		usuarioDAO.alterar(usuario);
		return MessagesUtil.getMessageKey("senhaAlteradaSucesso");

	}

	public Usuario buscarUsuarioPorId(Long id) {
		return usuarioDAO.getById(id);
	}

	public Collection<Usuario> listarOrdenado() {
		return usuarioDAO.listarOrdenado();
	}

	public Collection<Perfil> listarPerfisOrdenado() {
		return perfilDAO.listarOrdenado();
	}

	@Transactional(readOnly = false)
	public String remover(Usuario usuario) {
		usuarioDAO.remover(usuario);
		return MessagesUtil.getMessageKey("removidoSucesso");
	}

	@Transactional(readOnly = false)
	public String inserir(Usuario usuario) {
		usuario.setPassword(SecurityUtil.criptografar(usuario.getPassword()));
		usuarioDAO.inserir(usuario);
		return MessagesUtil.getMessageKey("criadoSucesso");
	}

	@Transactional(readOnly = false)
	public String salvar(Usuario usuario) {
		usuarioDAO.alterar(usuario);
		return MessagesUtil.getMessageKey("alteradoSucesso");
	}

	public List<Usuario> buscarPorFiltros(Filtro filtro) {
		return getUsuarioDAO().buscarPorFiltros(filtro);
	}

}
